#include "bsp_epit.h"
#include "bsp_int.h"
#include "bsp_led.h"

/* 初始化EPIT */
void epit1_init(unsigned int frac, unsigned int value)
{
    if (frac > 4095)
    {
        frac = 4095;
    }
    /* 配置EPIT_CR寄存器 */
    EPIT1->CR = 0;
    EPIT1->CR = (1 << 1 | 1 << 2 | 1 << 3 | frac << 4 | 1 << 24);
    EPIT1->LR = value; /* 加载寄存器 */
    EPIT1->CMPR = 0;   /* 比较寄存器 */

    /* 初始化中断 */
    GIC_EnableIRQ(EPIT1_IRQn);

    /* 注册中断服务函数 */
    system_register_irqhandler(EPIT1_IRQn, (system_irq_handler_t)epit1_irqhandler, NULL);

    /* 打开EPIT定时器 */
    EPIT1->CR |= (1<<0);
}

/* EPIT中断处理函数 */
void epit1_irqhandler(void)
{
    static unsigned char status = 0;
    status = !status;
    if (EPIT1->SR & (1 << 0))
    {
        led_switch(LED0, status);
    }
    /* 清除中断标志位 */
    EPIT1->SR |= (1 << 0);
}
